package cn.fl.product.service;

import java.util.List;

import cmm.mid.core.framework.dto.DataResultDTO;
import cmm.mid.core.framework.page.KeyValueVO;
import cmm.mid.core.framework.page.Pager;
import cn.cmm.base.framework.exception.BaseException;
import cn.fl.mfr.web.vo.MfrFlowSHVO;
import cn.fl.product.vo.MfrInfoVO;
import cn.fl.system.vo.SysUlFilesRecVO;
import fl.flow.facade.flow.dto.FlowStartParamsDTO;
import fl.spl.facade.mfr.condition.MfrInfoQueryCondition;
import fl.spl.facade.mfr.dto.MfrInfoDTO;
import fl.spl.facade.mfr.dto.MfrInfoModDTO;

/**
 * @Description: 厂商信息表 客户端服务层接口
 * 业务层方法名称前缀：
 * 新增：add*
 * 删除：remove*
 * 修改：modify*
 * 批量：batch*
 * 查询对象：select* get*
 * 查询集合：search*
 */
public interface IMfrInfoService {

	/**
	 * 查询所有事业部
	 * @return
	 * @throws BaseException
	 */
	public List<KeyValueVO> searchSelectOrgCdlist()throws BaseException;

	/**
	 * 获取唯一对象
	 * @param id 主键
	 * @return 对象DTO
	 */
	public MfrInfoVO selectById(Long id, String currentOrgCd)throws BaseException;

	/**
	 * 新增
	 * @param entity
	 * @return
	 */
	public Long add(MfrInfoVO entity, String currentOrgCd) throws BaseException;

	/**
	 * 删除
	 * @param id
	 * @return
	 */
	//public boolean removeById(Long id)throws BaseException;

	/**
	 * 修改
	 * @param entity
	 * @return
	 */
	public boolean modify(MfrInfoVO entity, String currentOrgCd)throws BaseException;

	/**
	 * 分页查询所有
	 * @param page
	 * @return
	 */
	public Pager searchListPage(Pager page)throws BaseException;

	/**
	 * 不分页查询所有
	 * @return
	 * @throws BaseException
	 */
	public List<MfrInfoVO> searchList(MfrInfoQueryCondition qc)throws BaseException;

	/**
	 * 批量删除
	 * @param ids
	 * @return
	 * @throws BaseException
	 */
	public boolean removeByIds(List<Long> ids)throws BaseException;

	/**
	 * 启用厂商
	 * @param id
	 * @return
	 * @throws BaseException
	 */
	public boolean enAblePrdMfrInfo(Long id) throws BaseException;

	/**
	 * 禁用厂商
	 * @param id
	 * @return
	 * @throws BaseException
	 */
	public boolean disAblePrdMfrInfo(Long id) throws BaseException;

	/**
	 * 查询数据字典
	 * @param grpCd 组代码
	 * @return
	 * @throws BaseException
	 */
	public List<KeyValueVO> searchCdList(String grpCd) throws BaseException;


	//流程相关 接口################################################################
	/**
	 * 通过厂商id 判断该厂商是否存在变更中流程
	 * @param id
	 * @return true 存在变更流程 false 不存在变更流程
	 */
	public boolean checkMfrModFlowStatus(Long id) throws BaseException;


	/**
	 * 发起厂商准入流程
	 * @param flowStartParamsDTO
	 * @return
	 * @throws BaseException
	 */
	public DataResultDTO addMfrAccessFlowStart(FlowStartParamsDTO flowStartParamsDTO) throws BaseException ;


	/**
	 * 通过厂商id 判断该厂商是否已发起流程
	 * @param id
	 * @return true 存在变更流程 false 不存在变更流程
	 */
	public boolean checkMfrInfoFlowStatus(Long id) throws BaseException;

	/**
     * 厂商相关流程
     * @param mfrId
     * @return
     * @throws BaseException
     */
	public List<MfrFlowSHVO> searchMfrFlowList(Long mfrId)throws BaseException;


	/**
	 * 是否应该发起变更流程
	 * @param dto
	 * @param isBsc
	 * @return
	 */
	public boolean getChangeStatus(MfrInfoDTO dto, String isBsc) throws BaseException ;

	/**
	 * 通过厂商id 判断该厂商是否在登陆人所属事业部 存在放款方式变更流程
	 * @param id
	 * @param buOrgCd
	 * @return
	 */
	public boolean checkMfrPayTypModFlowStatus(Long id, String buOrgCd) throws BaseException ;

	/**
	 * 通过厂商id 判断该厂商是否存在基础信息变更流程
	 * @param id
	 * @return
	 */
	public boolean checkMfrBaseModFlowStatus(Long id) throws BaseException ;

	/**
	 * 发起厂商变更流程
	 * @param flowStartParamsDTO
	 * @return
	 * @throws BaseException
	 */
	public DataResultDTO modifyMfrInfoFlowStart(FlowStartParamsDTO flowStartParamsDTO) throws BaseException;

	/**
	 * 同步修改基础信息  新增修改主表 修改详细表
	 * @param mfrInfoModDTO
	 * @param dto
	 * @return
	 * @throws BaseException
	 */
	public Long addMfrInfoMod(MfrInfoModDTO mfrInfoModDTO, MfrInfoDTO dto) throws BaseException;

	/**
	 * 流程发起成功  修改非流程字段
	 * @param mfrInfoDTO
	 * @return
	 * @throws BaseException
	 */
	public boolean modifyMfrBscInfoFlow(MfrInfoDTO mfrInfoDTO) throws BaseException;

	/**
	 * 流程发起失败  删除修改信息主表
	 * @param modId
	 * @throws BaseException
	 */
	public boolean removeMfrInfoMod(Long modId) throws BaseException;

	/**
	 *	再次修改
	 * @param entity
	 * @return
	 * @throws BaseException
	 */
	public boolean modifyBscAgain(MfrInfoDTO entity,String modId) throws BaseException;

	/**
	 * 查询流程中 厂商详情
	 * @param id
	 * @param modId
	 * @param currentOrgCd
	 * @return
	 * @throws BaseException
	 */
	public MfrInfoVO selectMfrFlowById(Long id, Long modId,String currentOrgCd) throws BaseException;
	
	/**
	 * 资料新增
	 * @param fileList
	 * @return
	 * @throws BaseException
	 */
	public boolean batchAddFileList(List<SysUlFilesRecVO> fileList)throws BaseException;

	/**
	 * 附件变更详细
	 * @param mfrId
	 * @param modId
	 * @return
	 * @throws BaseException
	 */
	public boolean modifyMfrInfoModDtlFileList(Long mfrId ,Long modId) throws BaseException;

	/**
     * 查询经营品牌下拉框数据
     * @return
     * @throws BaseException
     */
    public List<KeyValueVO> searchBrandList(String code)throws BaseException;
    
    /**
     * 查询事业部下拉框数据
     * @return
     * @throws BaseException
     */
    public List<KeyValueVO> searchBuOrgCdList()throws BaseException;
    
    /**
	 * 分页查询所有(掩码处理)
	 * @param page
	 * @param isMask (是否做掩码处理，1：是，0：否)
	 * @return
	 */
	public Pager searchListPageByMask(Pager page, int isMask)throws BaseException;
	
	/**
	 * 获取唯一对象(掩码处理)
	 * @param id 主键
	 * @param isMask (是否做掩码处理，1：是，0：否)
	 * @return 对象DTO
	 */
	public MfrInfoVO selectByIdAndMask(Long id, int isMask, String currentOrgCd)throws BaseException;
}
